ComfyUI 双显卡频繁 OOM 完整排障方案

3次阅读
没有评论

先明白核心坑(90% 人踩这里)

原生 Comfy 不会自动合并两张卡显存!不是 16G+16G=32G

默认行为:全部模型优先加载到 GPU0(主卡),副卡 GPU1 闲置;主卡先爆显存 OOM。

两种并行模式完全不同:

  1. 任务并行(最稳、推荐,不容易 OOM):开 2 个独立 Comfy 进程,每张卡单独跑任务
  2. 模型并行(单张图拆分到双卡,难度高,极易 OOM):单工作流把 UNet 分层放两张卡,依赖插件,PCIe 带宽不足还会卡死

一、立刻生效:启动参数 + 环境变量(优先尝试)

Windows 启动脚本开头添加;Linux 写在python main.py前面

bat

:: Windows CMD
set PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
:: 解决显存碎片导致明明有空余却报OOM(最重要一条)

:: 显存策略三选一
python main.py --medvram
:: 显存紧张优先用:--lowvram
:: 显存充足:--highvram(不推荐双卡默认使用)

Linux

bash

export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
python main.py --medvram

重要参数说明

  • --lowvram:模型分片,计算时来回卸载模型,牺牲速度换取显存
  • --medvram:平衡模式,日常首选
  • 不要同时加 --cuda-device 0,1 直接单进程双卡跑图(极易主卡塞满 OOM)

二、方案 A【最稳定,强烈推荐:双进程任务并行】

适用场景:批量出图、同时跑多个工作流,基本杜绝莫名 OOM

原理:两个独立 Comfy 进程,各自独占一张显卡,互不抢占显存

Windows 示例启动脚本

进程 1(GPU0,端口 8188) run_0.bat

bat

set CUDA_VISIBLE_DEVICES=0
set PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
python main.py --port 8188 --medvram

进程 2(GPU1,端口 8189) run_1.bat

bat

set CUDA_VISIBLE_DEVICES=1
set PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
python main.py --port 8189 --medvram

打开两个网页:127.0.0.1:8188 / 127.0.0.1:8189,分别调度两张显卡。

✅ 优点:无显存争抢、兼容性最强、不会莫名 OOM

❌ 局限:单一张图无法同时利用两张卡加速

三、方案 B【单工作流双卡跑一张图:模型并行】

如果你想要一张图同时占用两张卡(FLUX/SD3 大模型刚需),必须插件,原生不支持。

插件选择

  1. ComfyUI-MultiGPU(最流行)
    • 安装:custom_nodes 克隆 git clone https://github.com/cozycat93/ComfyUI-MultiGPU
    • 使用节点:UNETLoaderDisTorch2MultiGPU
    • 参数:compute_device=cuda:0donor_device=cuda:1;设置virtual_vram_gb分配副卡承载的模型显存
    • ⚠️ 警告:两张显卡显存规格尽量一致;大小差距很大极易失衡 OOM
  2. 新版 Comfy 内置 MultiGPU WorkUnits 适合 SDXL、视频模型;仅支持同规格显卡,CFG 拆分并行,不适合超大 UNet。

风险:双卡之间频繁传输张量,PCIe 带宽低时速度暴跌;分配不合理直接主卡 OOM。

四、快速降显存压力通用优化(无论哪种方案都要做)

  1. 模型量化 FLUX/SD3 使用 FP8 / GGUF 量化 UNet,显存直接降低 30%~50%
  2. 工作流设置
    • 关闭不必要 ControlNet、多 LoRA;不要一次性加载多个大模型常驻显存
    • VAE 使用 FP16;启用 xformers / SageAttention(Forge 版本优先)
  3. Forge 用户重点优化 plaintext--use-sage-attention 大幅降低扩散过程中间张量显存占用,解决高分辨率 OOM
  4. 清理模型缓存 设置 --model-cache-capacity 3,限制常驻模型数量,防止越跑显存越高

五、常见 OOM 原因排查清单

  1. ❌ 错误用法:单进程设置CUDA_VISIBLE_DEVICES=0,1直接跑标准工作流 → 现象:GPU0 爆满,GPU1 空闲,然后 OOM;原生不会自动分摊 UNet
  2. ❌ 显存碎片:nvidia-smi 看还有空余显存,仍然报错 OOM → 修复:务必开启 PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
  3. ❌ 同时运行其他 AI 程序(LLM、语音模型占用 GPU0),显存抢占
  4. ❌ 双卡型号不一致(如 8G+16G)使用 MultiGPU 模型并行,负载失衡
  5. ❌ 连续生成大量图片,模型缓存不释放,显存持续上涨 → 重启 Comfy,或者降低缓存上限

六、建议优先级排序

  1. 优先尝试【方案 A:双进程隔离显卡】,稳定性最高
  2. 如果需要单张图双卡加速 → 使用 ComfyUI-MultiGPU 模型并行,配合 FP8 量化
  3. 全部启动脚本加上 expandable_segments 环境变量 + --medvram
正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)
验证码